package cn.bdqn.biz;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class Myproxy implements InvocationHandler{
	
	private Object targetObject;
	
	/**
	 * 绑定委托对象并返回一个代理类
	 * @param targetObject
	 * @return
	 */
	public Object createProxyInstance(Object targetObject){
		this.targetObject = targetObject;
		return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
										targetObject.getClass().getInterfaces(), 
										this);
		
	}

	/**
	 * @param proxy:指被代理的对象
	 * @param method：要调用的方法
	 * @param args：方法调用时所需要的参数
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		// TODO Auto-generated method stub
		//注入需要调用的方法
		command();
		//执行被代理对象的方法，如果方法有返回值则赋值给ret
		Object ret = method.invoke(targetObject, args);
		//注入需要调用的方法
		award();
		return ret;
	}
	
	private void command(){
		System.out.println("驯兽师发出命令！");
	}
	
	private void award(){
		System.out.println("驯兽师给予奖励！");
	}
	
}
